#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2025/2/14 15:11
# @Author  : XH
# @File    : handle_yaml.py
# @Software: PyCharm
from pathlib import Path
import yaml
import os

from common.handle_path import CONF_DIR

# from jsonpath_ng.ext import parse
class HandleYaml:
    def __init__(self, file_path: str, conf_dir: Path = CONF_DIR):
        """
        初始化HandleYaml类，设置YAML文件路径。
        :param file_path: 相对于项目根目录的YAML文件路径
        """
        self.file_path = os.path.join(conf_dir, file_path)
    def read_yaml(self) -> dict:
        """
        读取YAML文件并返回其内容。
        :return: 解析后的YAML数据，通常为字典格式
        :raises FileNotFoundError: 如果文件不存在
        :raises yaml.YAMLError: 如果YAML解析失败
        :raises Exception: 其他文件读取错误
        """
        if not os.path.exists(self.file_path):
            raise FileNotFoundError(f"YAML文件不存在: {self.file_path}")

        try:
            with open(self.file_path, 'r', encoding='utf-8') as file:
                data = yaml.safe_load(file)
                return data
        except yaml.YAMLError as e:
            raise Exception(f"读取YAML文件时发生错误: {e}")
        except Exception as e:
            raise Exception(f"发生未知错误: {e}")

    def get_value(self, key: str, default=None):
        """
        获取YAML文件中某个键对应的值。如果键不存在，返回默认值。

        :param key: 需要获取的键名
        :param default: 如果键不存在时返回的默认值
        :return: 键对应的值，如果键不存在则返回默认值
        """
        data = self.read_yaml()
        return data.get(key, default)


    def read_yaml_case(self):
        yaml_data = self.read_yaml()
        data_list = []
        for data in yaml_data:
            tmp= tuple(data.values())
            data_list.append(tmp)
        return data_list


    # def get_value_complex(self, jsonpath_expr):
    #     """
    #     根据 JSONPath 表达式从 YAML 数据中获取值 可以链接basicstudy进行jsonpath进行了解
    #
    #     :param jsonpath_expr: JSONPath 表达式，如 "$.log.name" 或 "$.log[*].level"
    #     :return: 匹配的值，如果没有找到则返回 None
    #     """
    #     data = self.read_yaml()
    #     jsonpath = parse(jsonpath_expr)
    #     result = [match.value for match in jsonpath.find(data)]
    #     return result if result else None
# 示例使用
if __name__ == "__main__":
    #yaml_file = 'log_config.yaml'  # 你的YAML文件路径
    # reader = HandleYaml(yaml_file).get_value("log")["name"]
    yaml_file = 'login_case.yaml'
    reader = HandleYaml(yaml_file).read_yaml_case()
    print(reader)


